package com.kx.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

/**
 * @ClassName UserController
 * @Author Sun
 * @Date 2021/5/19 15:58
 */
@Controller
@RequestMapping("user") //指定访问该controller共有的路径
public class UserController {

    /**
     * 返回数据的方式1 自己通过 response 返回
     */
    @RequestMapping("/resp1")
    public void resp1(String username, HttpServletResponse resp) throws UnsupportedEncodingException {
        try {
            resp.getWriter().write(username);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 转发到某个界面，通过return "forword:xxxx" ,springmvc默认使用转发，所以也可以写成return "xxxx"
     */

    @RequestMapping("/resp2")
    public String resp2(String username){
        System.err.println("resp2 收到了一个参数:" + username);
        //转发到resp1,可以使用相对路径也可以使用绝对路径
        //相对路径的格式返回,只能返回到当前 controller 下的方法
//        return "resp1?username=resp2"+username;
        //绝对路径返回，可以返回到本项目下的其他controller /表示当前项目路径
        return "/user/resp1";
    }

    /**
     * 重定向到某个地址，使用return "redirect:xxx"
     * @param username
     * @return
     */
    @RequestMapping("/resp3")
    public String resp3(String username){
        System.err.println("resp3 收到了一个参数:" + username);
        //重定向到resp1，requset域范围内数据会丢失
//        return "redirect:resp1?username=resp3:"+username;
        return "redirect:/user/resp1?username=resp3:"+username;
    }


    /**
     * 重定向到某个地址，也可以重定向到站外地址,需要加协议
     * @param username
     * @return
     */
    @RequestMapping("/resp4")
    public String resp4(String username){
        System.err.println("resp4 收到了一个参数:" + username);
        return "redirect:http://www.baidu.com";
    }

    /**
     * 转发或重定向到前端jsp目录下的jsp页面
     * @param username
     * @return
     */
    @RequestMapping("/resp5")
    public String resp5(String username) {

        //转发
//        return "/jsp/success.jsp";
        //重定向
        return "redirect:/jsp/success.jsp";
    }

    /**
     * 在配置文件spring-mvc.xml中配置资源前缀和后缀可以通过转发访问到WEB-INF目录下的内容，
     * 但是重定向的时候不能使用统一的前后缀,通过重定向访问不到
     * @param username
     * @return
     */
    @RequestMapping("/resp6")
    public String resp6(String username) {
        //转发的时候如果没有找到这个地址会通过配置的InternalResourceViewResolver
        //来帮我们填充路径的前部分和后部分变成新的路径进行访问
        return "fail";
    }
}
